/**
 * @项目名称: lession01
 * @文件名称: Datatype_Key.java
 * @Date: 2016年9月21日
 * @Copyright: 2016 www.yunhe.cn Inc. All rights reserved.
 * 注意：本内容仅限于云和数据公司内部传阅，禁止外泄以及用于其他的商业目的
*/
package com.cn.yunhe.redis.study;

import org.apache.log4j.Logger;
import org.junit.Test;
import redis.clients.jedis.Jedis;

/**
 * 
 * JEDIS常用的SET类型的操作方法
 * 
 * @author ZSL
 *
 */
public class Datatype_Set {

	/**
	 * 日志工具
	 */
	Logger logger = Logger.getLogger(Datatype_Set.class);
	
	/**
	 * 测试操作
	 * 
	 * 以下是多数相对常用的KEY操作
	 * 
	 * 其他未涉及到的自己可以扩展查询命令练习下
	 * 
	 * 工作生产环境中根据具体业务，需要用到了再去查资料调用某个命令方法即可。
	 * 
	 */
	@Test
	public void operator(){
		
		Jedis client = new Jedis("127.0.0.1",6379);
		
	    client.flushDB();
	    logger.debug("============向集合中添加元素============");
	    logger.debug(client.sadd("eleSet", "e1","e2","e4","e3","e0","e8","e7","e5"));
	    logger.debug(client.sadd("eleSet", "e6"));
	    logger.debug(client.sadd("eleSet", "e6"));
	    logger.debug("eleSet的所有元素为："+client.smembers("eleSet"));
	    logger.debug("删除一个元素e0："+client.srem("eleSet", "e0"));
	    logger.debug("eleSet的所有元素为："+client.smembers("eleSet"));
	    logger.debug("删除两个元素e7和e6："+client.srem("eleSet", "e7","e6"));
	    logger.debug("eleSet的所有元素为："+client.smembers("eleSet"));
	    logger.debug("随机的移除集合中的一个元素："+client.spop("eleSet"));
	    logger.debug("随机的移除集合中的一个元素："+client.spop("eleSet"));
	    logger.debug("eleSet的所有元素为："+client.smembers("eleSet"));
	    logger.debug("eleSet中包含元素的个数："+client.scard("eleSet"));
	    logger.debug("e3是否在eleSet中："+client.sismember("eleSet", "e3"));
	    logger.debug("e1是否在eleSet中："+client.sismember("eleSet", "e1"));
	    logger.debug("e1是否在eleSet中："+client.sismember("eleSet", "e5"));
	    logger.debug("=================================");
	    logger.debug(client.sadd("eleSet1", "e1","e2","e4","e3","e0","e8","e7","e5"));
	    logger.debug(client.sadd("eleSet2", "e1","e2","e4","e3","e0","e8"));
	    logger.debug("将eleSet1中删除e1并存入eleSet3中："+client.smove("eleSet1", "eleSet3", "e1"));
	    logger.debug("将eleSet1中删除e2并存入eleSet3中："+client.smove("eleSet1", "eleSet3", "e2"));
	    logger.debug("eleSet1中的元素："+client.smembers("eleSet1"));
	    logger.debug("eleSet3中的元素："+client.smembers("eleSet3"));
	    logger.debug("============集合运算=================");
	    logger.debug("eleSet1中的元素："+client.smembers("eleSet1"));
	    logger.debug("eleSet2中的元素："+client.smembers("eleSet2"));
	    logger.debug("eleSet1和eleSet2的交集:"+client.sinter("eleSet1","eleSet2"));
	    logger.debug("eleSet1和eleSet2的并集:"+client.sunion("eleSet1","eleSet2"));
	    logger.debug("eleSet1和eleSet2的差集:"+client.sdiff("eleSet1","eleSet2"));//eleSet1中有，eleSet2中没有

		
		client.close();
	}

	
	/**
	 * 推荐好友
	 * 
	 * 【张三    】  有 刘邦、关羽、诸葛亮  3个同学。
	 * 【刘邦    】  有 赵云、黄忠、马超、刘表      4个同学。
	 * 【关羽    】  有 曹操、张辽、徐晃、赵云      4个同学。
	 * 【诸葛亮】  有 鲁肃、庞统、赵云、徐庶      4个同学。
	 * 
	 * 实际工作生产具体业务场景，对于二度好友查找用的比较多，比如QQ添加好友时候，推荐其他好友可能你也认识。
	 * 
	 */
	@Test
	public void recommandFriends(){
		
		Jedis client = new Jedis("127.0.0.1",6379);
		client.auth("123456");
		
		//TODO:
		client.sadd("张三", "刘邦","关羽","诸葛亮");
		
		client.sadd("刘邦", "赵云","黄忠","马超","刘表");
		client.sadd("关羽", "曹操","张辽","徐晃","赵云");
		client.sadd("诸葛亮", "鲁肃","庞统","赵云","徐庶");
		
		logger.debug("可能的好友是："+client.sinter("刘邦","关羽","诸葛亮"));

		
		client.close();
	}
}
